package com.itany.nmms.service;

import com.itany.nmms.entity.Dept;
import com.itany.nmms.entity.Staff;
import com.itany.nmms.exception.DeptErrorException;
import com.itany.nmms.exception.DeptExistException;
import com.itany.nmms.exception.LoginDisabledException;
import com.itany.nmms.exception.RequestParameterErrorException;

import java.util.List;

/**
 * Author:shixiaojun@itany.com
 * Date: 2022/3/17 14:29
 * Version: 1.0-SNAPSHOT
 */
public interface DeptService {

    /**
     * 添加父部门
     * @param name      部门名称
     * @param remark    部门职能
     * @param staff     部门创建者
     */
    public void addFatherDept(String name, String remark, Staff staff) throws RequestParameterErrorException, LoginDisabledException, DeptExistException;

    /**
     * 查询所有部门以及其所属父部门
     * @return
     */
    public List<Dept> findAll();

    /**
     * 添加子部门
     * @param fatherId  所属部门编号
     * @param name      子部门名称
     * @param remark    子部门职能
     * @param staff     子部门创建者
     */
    public void addSonDept(String fatherId,String name,String remark,Staff staff) throws RequestParameterErrorException, LoginDisabledException, DeptExistException;

    /**
     * 修改设置默认值
     * @param id
     * @return
     */
    public Dept findById(String id) throws RequestParameterErrorException;

    /**
     * 修改部门信息
     * @param id
     * @param name
     * @param remark
     */
    public void modifyDept(String id,String name,String remark) throws RequestParameterErrorException, DeptExistException;

    /**
     * 启用部门
     * @param id
     */
    public void enableDept(String id) throws RequestParameterErrorException, DeptErrorException;

    /**
     * 禁用部门,同时禁用该部门下的所有子孙部门
     * @param id
     */
    public void disableDept(String id) throws RequestParameterErrorException;

    /**
     * 查询所有启用的部门
     * @return
     */
    public List<Dept> findEnable();
}
